<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarAccidentRecord;
use App\Models\CarModels\CarFuelRecord;
use App\Models\CarModels\CarInsuranceRecord;
use App\Models\CarModels\CarInsuranceRecordBill;
use App\Models\CarModels\CarInsuranceRecordBillFile;
use App\Models\CarModels\CarMaintence;
use App\Models\Garbage\GarbageEventFiles;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
use Validator;
/**
 * @group 设备管理->任务管理->保险记录->保险发票记录
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */


class CarInsuranceRecordBillController extends Controller
{
    /**
     * @queryParam kind  发票类型 1 普票 2. 增值税发票
     * @queryParam record_id 发票所属的保险记录
     * @queryParam amount 发票额
     * @queryParam number 发票数量
     * @queryParam rate 税率
     * @queryParam nonbill_amount  不含税金额
     * @queryParam tax 税额
     * @queryParam total 总计
     *
     */
    public function index(Request $request){

        $query = CarInsuranceRecordBill::with('images');
        $query->where(function($q) use($request){
            //$request->has('search') && $q->where('department','like',"%{$request->get('search')}%");
//            $request->has('user') &&   $q->where('staff_id',$request->get('user'));
        });
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);

    }

    /**
     *
     * @bodyParam kind int required 发票类型 1 普票 2. 增值税发票
     * @bodyParam record_id int required 发票所属的保险记录 外键 对应保险记录
     * @bodyParam amount float required 发票额
     * @bodyParam number int required 发票数量
     * @bodyParam rate float required 税率
     * @bodyParam nonbill_amount float required 不含税金额
     * @bodyParam tax float required 税额
     * @bodyParam total float required 总计
     * @bodyParam files string optional 订单回收相关文件id串 如果只有一个文件 上传 1 如果多个 使用逗号隔开 1,2,3,4,5 特别注图片id必须是已经调用图片接口添加好了的
     *
     * @queryParam kind  发票类型 1 普票 2. 增值税发票
     * @queryParam record_id 发票所属的保险记录
     * @queryParam amount 发票额
     * @queryParam number 发票数量
     * @queryParam rate 税率
     * @queryParam nonbill_amount  不含税金额
     * @queryParam tax 税额
     * @queryParam total 总计
     *
     */
    public function store(Request $request){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        try{

            $data=CarInsuranceRecordBill::create($request->all());
            if($request->has('files')){
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['bill_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    CarInsuranceRecordBillFile::insert($file_data);
                }catch (\Exception $e){
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加"],404), 404);
                }

            }
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg($e->getMessage(),400),400);
        }
    }

    /**
     *
     *
     * @bodyParam kind int required 发票类型 1 普票 2. 增值税发票
     * @bodyParam record_id int required 发票所属的保险记录 外键 对应保险记录
     * @bodyParam amount float required 发票额
     * @bodyParam number int required 发票数量
     * @bodyParam rate float required 税率
     * @bodyParam nonbill_amount float required 不含税金额
     * @bodyParam tax float required 税额
     * @bodyParam total float required 总计
     *
     *
     */
    public function show($pk){
        $data = CarInsuranceRecordBill::with('images')->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该记录"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     * @bodyParam kind int optional 发票类型 1 普票 2. 增值税发票
     * @bodyParam record_id int optional 发票所属的保险记录 外键 对应保险记录
     * @bodyParam amount float optional 发票额
     * @bodyParam number int optional 发票数量
     * @bodyParam rate float optional 税率
     * @bodyParam nonbill_amount float optional 不含税金额
     * @bodyParam tax float optional 税额
     * @bodyParam total float optional 总计
     * @bodyParam files string optional 修改文件信息(提交的图片id不能重复) 比如有文件 1,2,3,4,5 想把5删除了 那么就提交 1,2,3,4 如果只有一个文件 上传 1 如果多个 使用逗号隔开 1,2,3,4,5 特别注图片id必须是已经调用图片接口添加好了的
     *
     * @queryParam kind  发票类型 1 普票 2. 增值税发票
     * @queryParam record_id 发票所属的保险记录
     * @queryParam amount 发票额
     * @queryParam number 发票数量
     * @queryParam rate 税率
     * @queryParam nonbill_amount  不含税金额
     * @queryParam tax 税额
     * @queryParam total 总计
     *
     */
    public function update(Request $request, $pk){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $data = CarInsuranceRecordBill::find($pk);
        if($data == []){
            return response()->json(["message"=>"没有该发票记录"],404);
        }
        try {
            DB::beginTransaction();
            if($request->has('files')){
                $origin_files = CarInsuranceRecordBillFile::where('bill_id',$data->id)->get()->toArray();//图片原来的id号是好多 取出来

                $origin_file_ids = array();//这个数组用于报错以前的所有file的id号
                if($origin_files != []){
                    foreach ($origin_files as $v){
                        array_push($origin_file_ids,$v['id']);
                    }
                }
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['bill_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    CarInsuranceRecordBillFile::whereIn('id',$origin_file_ids)->delete();
                    CarInsuranceRecordBillFile::insert($file_data);
                }catch (\Exception $e){
                    DB::rollBack();
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加获取图片id重复"],404), 404);
                }
            }
            $data->update($request->all());
            DB::commit();
            return response()->json(encodeMsg($data,200), 200);
        }catch (QueryException $e){
            DB::rollBack();
            return response()->json(encodeMsg(["message"=>"名字重复".$e->getMessage()],400),400);
        }
    }

    /**
     */

    public function destroy($pk){
        $data = CarInsuranceRecordBill::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该发票记录"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
